package com.wicket.okrapp.biz.service.dto.common;

import com.wicket.okrapp.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Objects;
import java.util.Date;

/**
 * @desc EvaObjTargetCycleReportSortDto
 * @使用场景
 */
@Data
public class EvaObjTargetCycleReportSortDto
        extends BaseDto
        implements Serializable {

    /**
     * 被评对象目标周期ID:
     */
    @NotNull(message = "被评对象目标周期ID不能为空")
    @ApiModelProperty("被评对象目标周期ID")
    private String evaObjTargetCycleId;

    /**
     * 排序:
     */
    @NotNull(message = "排序不能为空")
    @ApiModelProperty("排序")
    private Long orderNumber;
/**
     * 虚拟组织下部门ID 
     */
    @ApiModelProperty("牵头部门ID")
    private String	 deptId;

    /**
     * 组织内部门身份名称 
     */
    @ApiModelProperty("组织内部门身份名称")
    private String	 virtualOrgDeptStatus;

    /**
     * 虚拟组织成员就职记录ID 
     */
    @ApiModelProperty("责任人就职记录ID")
    private String	 virtualOrgInductionRecordId;

    /**
     * 组内职务名称 
     */
    @ApiModelProperty("组内职务名称")
    private String	 virtualOrganizationPosition;

    /**
     * 目标周期简称 
     */
    @ApiModelProperty("目标周期简称")
    private String	 cyclelAlias;

    /**
     * 目标周期名称 
     */
    @ApiModelProperty("目标周期名称")
    private String	 targetCycleName;

    /**
     * 汇报通过时间 
     */
    @ApiModelProperty("汇报通过时间")
    private Date	 reportUpdateTime;

    /**
     * 目标达成情况 
     */
    @ApiModelProperty("目标达成情况")
    private String	 targetReached;

    /**
     * 权重 
     */
    @ApiModelProperty("权重")
    private Double	 weightValue;

    /**
     * 权重分值 
     */
    @ApiModelProperty("权重分值")
    private Double	 weightScore;

    /**
     * 实时得分 
     */
    @ApiModelProperty("实时得分")
    private Double	 realTimeScore;

    /**
     * 实时得分单位 
     */
    @ApiModelProperty("实时得分单位")
    private String	 realTimeScoreUnit;

    /**
     * 实际值 
     */
    @ApiModelProperty("实际值")
    private Double	 actualValue;

    /**
     * 实际值单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
     */
    @ApiModelProperty("实际值单位")
    private String	 actualValueUnit;

    /**
     * 诊断值 
     */
    @ApiModelProperty("诊断值")
    private Double	 targetDiagnosticValue;

    /**
     * 进度值 
     */
    @ApiModelProperty("进度值")
    private Double	 progressValue;

    /**
     * 进度值单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
     */
    @ApiModelProperty("进度值单位")
    private String	 progressValueUnit;

    /**
     * 进度较上次增降幅 
     */
    @ApiModelProperty("进度较上次增降幅")
    private Double	 progressFromLastRatio;

    /**
     * 进度较上次增降幅单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
     */
    @ApiModelProperty("进度较上次增降幅单位")
    private String	 progressFromLastRatioUnit;

    /**
     * 达成度 
     */
    @ApiModelProperty("达成度")
    private Double	 reach;

    /**
     * 达成度单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
     */
    @ApiModelProperty("达成度单位")
    private String	 reachUnit;

    /**
     * 达成度较上次增降福 
     */
    @ApiModelProperty("达成度较上次增降福")
    private Double	 actualFromLastTimeRatio;

    /**
     * 达成度较上次增降福单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
     */
    @ApiModelProperty("达成度较上次增降福单位")
    private String	 actualFromLastTimeRatioUnit;
/**
     * 关联目标内容ID 
     */
    @ApiModelProperty("关联目标内容ID")
    private String	 targetCycleContentId;

    /**
     * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标
     */
    @ApiModelProperty("关联目标内容类型编码")
    private String	 targetCycleContentTypeCode;
/**
     * 责任主体类型 PERSONAL:个人 DEPT:部门
     */
    @ApiModelProperty("责任主体类型")
    private String	 respBodyType;
/**
     * 目标值 
     */
    @ApiModelProperty("目标值")
    private Double	 targetValue;

    /**
     * 是否子周期 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否子周期不能为空")
@ApiModelProperty("是否子周期")
    private String	 isSubCycle;
/**
     * 数量型指标当无实际值标记 TRUE:是 FALSE:否
     */
    @ApiModelProperty("数量型指标当无实际值标记")
    private String	 quantityObjectiveNoValue;
/**
     * 较上次目标变化值 
     */
    @ApiModelProperty("较上次目标变化值")
    private Double	 changeFromLastTarget;

    /**
     * 较上次目标变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("较上次目标变化值单位")
    private String	 changeFromLastTargetUnit;

    /**
     * 较上次目标增降幅 
     */
    @ApiModelProperty("较上次目标增降幅")
    private Double	 fromLastTargetLiftRatio;

    /**
     * 较上次目标增降幅单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("较上次目标增降幅单位")
    private String	 fromLastTargetLiftRatioUnit;

    /**
     * 进度较上次变化值 
     */
    @ApiModelProperty("进度较上次变化值")
    private Double	 fromLastProgressValue;

    /**
     * 进度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("进度较上次变化值单位")
    private String	 fromLastProgressValueUnit;

    /**
     * 达成度较上次变化值 
     */
    @ApiModelProperty("达成度较上次变化值")
    private Double	 fromLastReach;

    /**
     * 达成度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("达成度较上次变化值单位")
    private String	 fromLastReachUnit;

    /**
     * 汇报得分（数值） 
     */
    @ApiModelProperty("汇报得分（数值）")
    private Double	 reportScoreValue;

    /**
     * 汇报得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("汇报得分单位")
    private String	 reportScoreUnit;

    /**
     * 实际得分（数值） 
     */
    @ApiModelProperty("实际得分（数值）")
    private Double	 actualScoreValue;

    /**
     * 实际得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("实际得分单位")
    private String	 actualScoreUnit;

    /**
     * 实时得分等级 
     */
    @ApiModelProperty("实时得分等级")
    private String	 realTimeScoreLevel;
/**
     * 汇报得分（文本） 
     */
    @ApiModelProperty("汇报得分（文本）")
    private String	 reportScore;

    /**
     * 实际得分（文本） 
     */
    @ApiModelProperty("实际得分（文本）")
    private String	 actualScore;
/**
     * 冗余评价模板ID 
     */
    @ApiModelProperty("冗余评价模板ID")
    private String	 evaluationTemplateId;
/**
     * 被评对象内容表主键ID
     */
    @ApiModelProperty("被评对象内容表主键ID")
    private String	 evaObjEntityId;

    /**
     * 被评对象内容表类型编码 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表 OMS_EXECUTE_CYCLE_STAGE:执行周期阶段表 OMS_CONF_SCHEME:配置方案表 OMS_EVA_OBJ_TARGET_CYCLE_OSET:被评对象目标周期目标设置表 OMS_EVA_OBJ_TARGET_CYCLE_WEIGHT_SET:被评对象目标周期权重设置表 OMS_NOTICE:通知公告表 OMS_CYCLE:周期表 OMS_EVALUATION_SUBJECT:评价主题表 OMS_BIZ_APP_BATCH:业务应用批次表 OMS_EVA_BATCH_RELATED_SET:评价模板批次相关设置表 OMS_TARGET_CYCLE_PLAN_SET:目标周期规划设置表 OMS_TARGET_OBJECTIVE_PLAN_EXTEND:指标扩展规划设置表 OMS_MESSAGE_CHANNEL:通道表
     */
    @ApiModelProperty("被评对象内容表类型编码")
    private String	 evaObjTableTypeCode;

    /**
     * 被评对象类型编码 EVA_PORTRAIT:评价画像 EVA_OBJECT:评价对象 FLEVEL_OBJ_TASK_DUTY_DEPT:一级部门目标任务责任部门 OKR_SUBJECT_DEPT:OKR责任主体部门 OKR_SUBJECT_PERSONAL:OKR责任主体个人
     */
    @ApiModelProperty("被评对象类型编码")
    private String	 evaObjTypeCode;

    /**
     * 冗余目标ID
     */
    @ApiModelProperty("冗余目标ID")
    private String	 targetId;
/**
     * 是否末级指标 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否末级指标")
    private String	 isLastObjective;

    /**
     * 目标实际结束时间 
     */
    @ApiModelProperty("目标实际结束时间")
    private Date	 targetActualEndtTime;

    /**
     * 周期ID 
     */
    @ApiModelProperty("周期ID")
    private String	 cycleId;
/**
     * 展示目标值
     */
    @ApiModelProperty("展示目标值")
    private Double	 showTargetValue;

    /**
     * 冗余单位
     */
    @ApiModelProperty("冗余单位")
    private String	 unit;

    private Date cycleEndTime;
/**
     * 冗余指标业务类型 NUMBER_GROWTH:数量增长型 NUMBER_DECLINE:数量降幅型 PERCENTAGE_GROWTH:百分比增长型 PERCENTAGE_DECLINE:百分比降幅型 PROGRESS:进度型 RATIO_GROWTH:比率增长型 RATIO_DECLINE:比率降幅型 SUBJECTIVE_QUALITATIVE:主观定性
     */
    @ApiModelProperty("冗余指标业务类型")
    private String	 targetValueType;

    @Override
  public boolean equals(Object o) {
      if (this == o) return true;
      if (o == null || getClass() != o.getClass()) return false;
      if (!super.equals(o)) return false;
      EvaObjTargetCycleReportSortDto that = (EvaObjTargetCycleReportSortDto) o;
      return  evaObjTargetCycleId == that.evaObjTargetCycleId&&orderNumber == that.orderNumber&&deptId == that.deptId&&virtualOrgDeptStatus == that.virtualOrgDeptStatus&&virtualOrgInductionRecordId == that.virtualOrgInductionRecordId&&virtualOrganizationPosition == that.virtualOrganizationPosition&&cyclelAlias == that.cyclelAlias&&targetCycleName == that.targetCycleName&&reportUpdateTime == that.reportUpdateTime&&targetReached == that.targetReached&&weightValue == that.weightValue&&weightScore == that.weightScore&&realTimeScore == that.realTimeScore&&realTimeScoreUnit == that.realTimeScoreUnit&&actualValue == that.actualValue&&actualValueUnit == that.actualValueUnit&&targetDiagnosticValue == that.targetDiagnosticValue&&progressValue == that.progressValue&&progressValueUnit == that.progressValueUnit&&progressFromLastRatio == that.progressFromLastRatio&&progressFromLastRatioUnit == that.progressFromLastRatioUnit&&reach == that.reach&&reachUnit == that.reachUnit&&actualFromLastTimeRatio == that.actualFromLastTimeRatio&&actualFromLastTimeRatioUnit == that.actualFromLastTimeRatioUnit&&targetCycleContentId == that.targetCycleContentId&&targetCycleContentTypeCode == that.targetCycleContentTypeCode&&respBodyType == that.respBodyType&&targetValue == that.targetValue&&isSubCycle == that.isSubCycle&&quantityObjectiveNoValue == that.quantityObjectiveNoValue&&changeFromLastTarget == that.changeFromLastTarget&&changeFromLastTargetUnit == that.changeFromLastTargetUnit&&fromLastTargetLiftRatio == that.fromLastTargetLiftRatio&&fromLastTargetLiftRatioUnit == that.fromLastTargetLiftRatioUnit&&fromLastProgressValue == that.fromLastProgressValue&&fromLastProgressValueUnit == that.fromLastProgressValueUnit&&fromLastReach == that.fromLastReach&&fromLastReachUnit == that.fromLastReachUnit&&reportScoreValue == that.reportScoreValue&&reportScoreUnit == that.reportScoreUnit&&actualScoreValue == that.actualScoreValue&&actualScoreUnit == that.actualScoreUnit&&realTimeScoreLevel == that.realTimeScoreLevel&&reportScore == that.reportScore&&actualScore == that.actualScore&&evaluationTemplateId == that.evaluationTemplateId&&evaObjEntityId == that.evaObjEntityId&&evaObjTableTypeCode == that.evaObjTableTypeCode&&evaObjTypeCode == that.evaObjTypeCode&&targetId == that.targetId&&isLastObjective == that.isLastObjective&&targetActualEndtTime == that.targetActualEndtTime&&cycleId == that.cycleId&&showTargetValue == that.showTargetValue&&unit == that.unit&&cycleEndTime == that.cycleEndTime&&targetValueType == that.targetValueType;
    }

    @Override
  public int hashCode() {
      return Objects.hash(super.hashCode(), evaObjTargetCycleId,orderNumber,deptId,virtualOrgDeptStatus,virtualOrgInductionRecordId,virtualOrganizationPosition,cyclelAlias,targetCycleName,reportUpdateTime,targetReached,weightValue,weightScore,realTimeScore,realTimeScoreUnit,actualValue,actualValueUnit,targetDiagnosticValue,progressValue,progressValueUnit,progressFromLastRatio,progressFromLastRatioUnit,reach,reachUnit,actualFromLastTimeRatio,actualFromLastTimeRatioUnit,targetCycleContentId,targetCycleContentTypeCode,respBodyType,targetValue,isSubCycle,quantityObjectiveNoValue,changeFromLastTarget,changeFromLastTargetUnit,fromLastTargetLiftRatio,fromLastTargetLiftRatioUnit,fromLastProgressValue,fromLastProgressValueUnit,fromLastReach,fromLastReachUnit,reportScoreValue,reportScoreUnit,actualScoreValue,actualScoreUnit,realTimeScoreLevel,reportScore,actualScore,evaluationTemplateId,evaObjEntityId,evaObjTableTypeCode,evaObjTypeCode,targetId,isLastObjective,targetActualEndtTime,cycleId,showTargetValue,unit,cycleEndTime,targetValueType);
    }

}
